package com.powerflasher.SampleApp {
	/**
	 * @author Eros Esp�nola
	 */
	import org.flixel.*;
	
	public class Nivel2_2 extends FlxState{
		[Embed(source = "2.png")] public static var bricks:Class;
		[Embed(source = "6.png")] public static var clouds:Class;
		[Embed(source = "map2_2_1.csv", mimeType = "application/octet-stream")] public static var mapa:Class;
		[Embed(source = "map2_2_2.csv", mimeType = "application/octet-stream")] public static var mapaElastico:Class;
		[Embed(source = "map2_2_3.csv", mimeType = "application/octet-stream")] public static var mapaCajas:Class;
		
		
		private var cielo:sky;
		private var jugador:Jugador;
		private var tanque:Tanque;
		
		private var mapBox:FlxTilemap;
		private var map:FlxTilemap;
		private var mapElastic:FlxTilemap;
		
		private var t:Number = 0;
		private var hmax:Boolean = true;
		private var box1:Box;
		private var box2:Box;
		
		private var bala:Bala;
		private var balas:FlxGroup;
		private var paused:Boolean;
		private var texto:FlxText;
		
		public function Nivel2_2(){
        	super();
        }
		
		override public function create():void{
            jugador = new Jugador(30,695);
			tanque = new Tanque(350, 644, 2, 0);
			
			box1 = new Box(128, 90);
			box2 = new Box(504, 90);
			cielo=new sky(0,0);
			bala = new Bala(-10,0,0,0,0);
			balas = new FlxGroup();
			
			balas.add(bala);
			
			mapBox=new FlxTilemap();
			mapBox.loadMap(new mapaCajas(), bricks, 32, 32);
			map=new FlxTilemap();
			map.loadMap(new mapa(), bricks, 32, 32);
			mapElastic=new FlxTilemap();
			mapElastic.loadMap(new mapaElastico(), bricks,32,32);

			
			mapBox.setTileProperties(16, FlxObject.UP);
			mapBox.setTileProperties(17, FlxObject.UP);
			
			mapElastic.setTileProperties(13, FlxObject.UP);
			mapElastic.setTileProperties(11, FlxObject.UP);
			mapElastic.setTileProperties(6, FlxObject.UP);
			
			paused = false;
			texto=new FlxText(0, 340, FlxG.width, "PAUSED GAME").setFormat(null, 65, 0xFFFFFF, "center");
			texto.kill();
			
			add(cielo);
			add(map);
			add(mapElastic);
			add(mapBox);
			add(jugador);
			add(tanque);
			add(box1);
			add(box2);
			add(balas);
			add(texto);
			
			FlxG.camera.y -= 48;
		}
		
		public function movimientoH():void{
			if(hmax && tanque.x<358){
				tanque.x+=1.5;
			}
			if(hmax && tanque.x>=358){
				hmax=false;
			}
			else if(!hmax &&tanque.x>32){
				tanque.x-=1.5;
			}
			if(!hmax && tanque.x<=32){
				hmax=true;
			}
		}
		
		override public function update():void{
			if(FlxG.keys.justPressed("P"))
				paused = !paused;
			if(!paused)
				texto.kill();
			if(paused){
				texto.y=jugador.y-340;
				texto.revive();
				return;
			}
			
			super.update();
			
			if(FlxG.keys.pressed("RIGHT")){
				jugador.x = jugador.x+3;
				jugador.play("derecha");
			}
			if(FlxG.keys.pressed("LEFT")){
				jugador.x = jugador.x-2;
				jugador.play("izquierda");
			}
			if(FlxG.keys.justPressed("UP") && (FlxG.collide(jugador,map))){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if(FlxG.keys.justPressed("UP") && (FlxG.collide(jugador,mapBox))){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if((FlxG.collide(jugador,mapElastic))){
				jugador.velocity.y = -500;
				jugador.y -= 80;
				jugador.play("arriba");	
			}
			if(box1.overlaps(tanque)){
				tanque.reduceLife();
				box1.setPosicion(0,0);
				box1.kill();
				if(tanque.getVida()==0){
					tanque.kill();
					bala.kill();
					FlxG.switchState(new Nivel3_1());
				}
			}
			if(box2.overlaps(tanque)){
				tanque.reduceLife();
				box2.setPosicion(0,0);
				box2.kill();
				if(tanque.getVida()==0){
					tanque.kill();
					bala.destroy();
					FlxG.switchState(new Nivel3_1());
				}
			}
			
			if(FlxG.collide(box1, map)){
				box1.setPosicion(128, 90);
			}
			if(FlxG.collide(box2, map)){
				box2.setPosicion(504, 90);
			}
			t+=FlxG.elapsed;
			if(t>=1.5){
				bala = tanque.fire(tanque.x+100,tanque.y,10,(jugador.x - tanque.x),(jugador.y-tanque.y));
				add(bala);
				balas.add(bala);
				t=0;
			}
			if(jugador.overlaps(tanque)){
				jugador.kill();
				FlxG.resetState();
				
			}
			if(FlxG.overlap(jugador,balas)){
				jugador.kill();
				FlxG.resetState();
				
			}
			movimientoH();

			FlxG.collide(jugador,map);	
			FlxG.collide(jugador,mapElastic);		
			FlxG.collide(box1, mapBox);
			FlxG.collide(box2, mapBox);
			FlxG.collide(jugador, box1);
			FlxG.collide(jugador, box2);
			FlxG.collide(jugador,mapBox);
			FlxG.overlap(jugador, balas);
			jugador.acceleration.y = 1000;
			box1.acceleration.y = 1000;
			box2.acceleration.y = 1000;
		}
	}
}
